class Solution {//leetcode1926——迷宫中离入口最近的出口
private:
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
public:
    int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
        int m=maze.size(),n=maze[0].size();
        bool vis[m][n];
        memset(vis,0,sizeof(vis));
        queue<pair<int,int>> q;
        vis[entrance[0]][entrance[1]]=true;
        q.push({entrance[0],entrance[1]});
        int step=0;
        while(q.size()){
            step++;
            int cnt=q.size();
            while(cnt--){
                auto [i,j]=q.front();
                q.pop();
                for(int k=0;k<4;k++){
                    int x=i+dx[k],y=j+dy[k];
                    if(x>=0&&x<m&&y>=0&&y<n&&vis[x][y]==false&&maze[x][y]=='.'){
                        if(x==0||x==m-1||y==0||y==n-1) return step;
                        q.push({x,y});
                        vis[x][y]=true;
                    }
                }
            }
        }
        return -1;
    }
};